package br.com.esporte.negocios.controlador;

import java.io.Serializable;
import java.util.Collection;

import br.com.esporte.negocios.entidade.imp.Entidade;
import br.com.esporte.negocios.entidade.imp.Usuario;
import br.com.esporte.repositorio.DAO.IGenericDAO;
import br.com.esporte.repositorio.filtro.IFiltro;

/**
 * 
 * @author Milton Domingues
 *
 * @param <ENTIDADE>
 * @param <ID>
 * @param <FILTRO>
 * @param <REPOSITORIO>
 */
public interface IControlador<ENTIDADE extends Entidade, ID extends Serializable, FILTRO extends IFiltro, REPOSITORIO extends IGenericDAO<ENTIDADE, ID, FILTRO>> {

	public void alterar(ENTIDADE vo, Usuario usuario);

	public ENTIDADE buscar(ID id);

	public Collection<ENTIDADE> consultar(FILTRO filtro);

	public REPOSITORIO getRepositorioDAO();

	public void inserir(ENTIDADE vo, Usuario usuario);

	public ENTIDADE load(ID id);

	public void remover(ENTIDADE entidade);

	public void resolverPerDependencias(ENTIDADE vo, Usuario usuario);

	public void resolverPosDependencias(ENTIDADE vo, Usuario usuario);

	public void validarAlteracao(ENTIDADE entidade);

	public void validarExclusao(ENTIDADE entidade);

	public void validarInclusao(ENTIDADE entidade);

	public void validarUnicidade(ENTIDADE vo);

}
